import { TodosStore, todosStore } from '../TodosStore'
import { UserStore } from '../UserStore'
import { UIStore } from '../UIStore'
import { CounterStore, counterStore } from '../CounterStore'

export class RootStore {
  todosStore: TodosStore
  userStore: UserStore
  uiStore: UIStore
  counterStore: CounterStore

  constructor() {
    this.userStore = new UserStore(this)
    this.uiStore = new UIStore()
    this.counterStore = counterStore
    this.todosStore = todosStore

    // 开发环境下将 store 挂载到 window 方便调试
    if (process.env.NODE_ENV === 'development') {
      (window as any).rootStore = this
    }
  }

  // 初始化应用数据
  initialize = async (): Promise<void> => {
    // 可以在这里进行应用启动时的初始化操作
    await this.userStore.fetchUsers()
  }

  // 清理资源
  dispose = (): void => {
    // 清理操作，比如取消订阅等
  }
}

// 创建 Store 实例的工厂函数
export const createRootStore = (): RootStore => {
  return new RootStore()
}